package com.media.system.service.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * AI标签识别结果
 * 
 * @author Claude
 * @since 2024-01-20
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AiTagResult {

    /**
     * 文件ID
     */
    private Long fileId;

    /**
     * 识别状态（success, failed, processing）
     */
    private String status;

    /**
     * 主要标签列表
     */
    private List<AiTag> tags;

    /**
     * 对象检测结果
     */
    private List<DetectedObject> objects;

    /**
     * 场景识别结果
     */
    private List<AiTag> scenes;

    /**
     * 人脸识别结果
     */
    private List<DetectedFace> faces;

    /**
     * 文本识别结果（OCR）
     */
    private String extractedText;

    /**
     * 颜色分析结果
     */
    private List<ColorInfo> dominantColors;

    /**
     * 质量评分
     */
    private BigDecimal qualityScore;

    /**
     * 内容安全评分
     */
    private BigDecimal safetyScore;

    /**
     * 推荐相册分类
     */
    private List<String> recommendedAlbums;

    /**
     * 处理耗时（毫秒）
     */
    private Long processingTime;

    /**
     * 错误信息
     */
    private String errorMessage;

    /**
     * 扩展属性
     */
    private Map<String, Object> metadata;

    /**
     * AI标签
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class AiTag {
        /**
         * 标签名称
         */
        private String name;

        /**
         * 置信度
         */
        private BigDecimal confidence;

        /**
         * 标签类别
         */
        private String category;

        /**
         * 父级标签
         */
        private String parentTag;
    }

    /**
     * 检测到的对象
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class DetectedObject {
        /**
         * 对象名称
         */
        private String name;

        /**
         * 置信度
         */
        private BigDecimal confidence;

        /**
         * 边界框坐标
         */
        private BoundingBox boundingBox;

        /**
         * 对象属性
         */
        private Map<String, String> attributes;
    }

    /**
     * 检测到的人脸
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class DetectedFace {
        /**
         * 人脸ID
         */
        private String faceId;

        /**
         * 年龄估计
         */
        private Integer estimatedAge;

        /**
         * 性别
         */
        private String gender;

        /**
         * 情绪
         */
        private String emotion;

        /**
         * 置信度
         */
        private BigDecimal confidence;

        /**
         * 人脸位置
         */
        private BoundingBox boundingBox;

        /**
         * 面部特征点
         */
        private List<FaceLandmark> landmarks;
    }

    /**
     * 颜色信息
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ColorInfo {
        /**
         * 颜色值（HEX）
         */
        private String hex;

        /**
         * RGB值
         */
        private int[] rgb;

        /**
         * 占比
         */
        private BigDecimal percentage;

        /**
         * 颜色名称
         */
        private String colorName;
    }

    /**
     * 边界框
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class BoundingBox {
        private Integer x;
        private Integer y;
        private Integer width;
        private Integer height;
    }

    /**
     * 面部特征点
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class FaceLandmark {
        private String type;
        private Integer x;
        private Integer y;
    }
}